package practice5;

import java.util.ArrayList;
import java.util.List;

/**
 * # 问题描述
 *
 * 给定长度分别为 `n` 和 `m` 的两个数列`a[n]`、`b[m]`，和一个整数`k`。
 * 求`|(a[i] - b[j])^2 - k^2|`的最小值。
 *
 * ## 输入格式
 *
 * 第一行有 2 个整数 `n`、`m`、`k`，分别表示数列 `a`、`b` 的长度，以及公式中的整数 `k`。
 *
 * 第二行有 `n` 个整数，表示数列 `a` 的各个元素。
 *
 * 第三行有 `m` 个整数，表示数列 `b` 的各个元素。
 *
 * ## 输出格式
 *
 * 求上述公式的最小值。
 *
 * **数据范围**
 *
 * 其中 20%的数据：`1 <= n,m <= 3000，-10^9 <= a[i], b[j], k <= 10^9，for all i, j`
 *
 * 其中 30%的数据：`1 <= n,m <= 50000，k = 0，-10^9 <= a[i], b[j] <= 10^9，for all i, j`
 *
 * 其中 50%的数据：`1 <= n,m <= 50000，-10^9 <= a[i], b[j], k <= 10^9，for all i, j`
 *
 * **输入样例**
 *
 * 5 5 1
 * 5 3 4 1 2
 * 0 6 7 9 8
 *
 * 5 5 0
 * 5 3 4 1 2
 * 0 6 7 9 8
 *
 * **输出样例**
 *
 * 0
 * 1
 */
public class Main {
    public static int solution(List<List<Integer>> cases) {
        // Please write your code here
        int n = cases.get(0).get(0);
        int m = cases.get(0).get(1);
        int k = cases.get(0).get(2);
        int[] diffs = new int[n * m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                int square1 = (cases.get(1).get(i) - cases.get(2).get(j)) * (cases.get(1).get(i) - cases.get(2).get(j));
                int square2 = k * k;
                diffs[i * m + j] = Math.abs(square1 - square2);
            }
        }
        //求diffs中最小的元素
        int min = diffs[0];
        for (int i = 1; i < diffs.length; i++) {
            if (diffs[i] < min) {
                min = diffs[i];
            }
        }
        if (min != -1) {
            return min;
        }
        return -1;
    }

    public static void main(String[] args) {
        // You can add more test cases here
        List<List<Integer>> case1 = new ArrayList<>();
        case1.add(List.of(5, 5, 1));
        case1.add(List.of(5, 3, 4, 1, 2));
        case1.add(List.of(0, 6, 7, 9, 8));

        List<List<Integer>> case2 = new ArrayList<>();
        case2.add(List.of(5, 5, 0));
        case2.add(List.of(5, 3, 4, 1, 2));
        case2.add(List.of(0, 6, 7, 9, 8));

        System.out.println(solution(case1) == 0);
        System.out.println(solution(case2) == 1);
    }
}